/**
 * Created by Thyiad on 2018/9/11 0011.
 */

import * as constant from './constant';

// 常规就是如下配置
// let normalConfig = {
//   cols: 2,
//   'label-width': '135px',
//   'input-enter-submit': false,
//   values: {
//     type: 1,
//     isUserGetCoupon: 1,
//   },
//   rules: [],
//   'default-field-col': 2,
//   'btns-position':'',
//   'btns-style':{
//
//   },
//   buttons:[
//     {
//       'text': '提交',
//       'event': 'submit',
//       'type': 'primary'
//     },
//     {
//       'text': '重置',
//       'event': '@reset',
//       'type': 'danger'
//     }
//   ],
//   fields:[],
// }

let validateAttr = {
  couponType: 1,
  fullAmount: 0,
  totalCouponNum: 0,
}

// 验证规则
let validateValidityDate = (rule, value, callback, source, options)=>{
  if(value===""){
    callback();
    return;
  }

  if(!/^\+?\d+$/.test(value)){
    callback(new Error("请填写合法的数字(大于0的数字)"))
    return;
  }
  let targetNumber = parseInt(value);
  if(targetNumber<1 || targetNumber>365){
    callback(new Error("请填写1到365范围内的数字"))
    return;
  }
  callback();
}

let validateTotalCouponNum = (rule, value, callback, source, options)=>{
  if(value===''){
    callback(new Error("总共限领张数不能为空"))
    return
  }
  if(!/^\+?\d+$/.test(value)){
    callback(new Error("请填写合法的数字(大于0的整数)"))
    return;
  }
  let targetNumber = parseInt(value);
  if(targetNumber<=0){
    callback(new Error("请填写大于0的数字"))
    return;
  }
  let maxNum = 1000000000;
  if(targetNumber>=maxNum){
    callback(new Error(`请填写小于10位的数字`))
    return;
  }
  callback();
}

let validateUserLimitGetCouponNum = (rule, value, callback, source, options)=>{
  if(value===""){
    callback(new Error("每人限领张数不能为空"))
    return;
  }
  if(!/^\+?\d+$/.test(value)){
    callback(new Error("请填写合法的数字(大于0的整数)"))
    return;
  }
  let targetNumber = parseInt(value);
  if(targetNumber<=0){
    callback(new Error("请填写大于0的数字"))
    return;
  }
  let targetTotalCouponNum = parseInt(validateAttr.totalCouponNum)
  if(!isNaN(targetTotalCouponNum) && targetNumber> targetTotalCouponNum){
    callback(new Error("每人限领张数不能大于总共限领张数"))
    return;
  }
  callback();
}

let validateFullAmount = (rule, value, callback, source, options)=>{
  if(validateAttr.couponType === constant.COUPON_TYPES_VALUES.zero){
    callback();
    return;
  }
  if(value===""){
    callback("请填写满足金额")
    return;
  }
  if(!/^[\-\+]?\d+(\.\d{0,2})?$/.test(value)){
    callback(new Error("请填写合法的数字(大于等于0，最长2位小数点)"))
    return;
  }
  let targetNumber = parseFloat(value);
  if(targetNumber<0){
    callback(new Error("不能小于0"))
    return;
  }
  callback();
}

let validateDiscount = (rule, value, callback, source, options)=>{
  if(validateAttr.couponType === constant.COUPON_TYPES_VALUES.zero){
    callback();
    return;
  }
  if(value===""){
    callback("请填写减/折金额")
    return;
  }
  if(!/^[\-\+]?\d+(\.\d{0,2})?$/.test(value)){
    callback(new Error("请填写合法的数字(大于0，最长2位小数点)"))
    return;
  }
  let targetNumber = parseFloat(value);
  if(targetNumber<=0){
    callback(new Error("请填写大于0的数字"))
    return;
  }
  if(validateAttr.couponType===constant.COUPON_TYPES_VALUES.manzhe && targetNumber>10){
    callback(new Error("满折券请输入0-10范围内的折扣数字"))
    return;
  }

  // if(validateAttr.couponType===constant.COUPON_TYPES_VALUES.manjian && targetNumber>validateAttr.fullAmount){
  // 	callback(new Error("不能比满足金额大"))
  // 	return;
  // }

  callback();
}

let validateJumpUrl = (rule, value, callback, source, options)=>{
  if(value===''){
    callback(new Error("跳转地址不能为空"))
    return;
  }

  if(!/^(zaapp|http|https):\/\/.+$/.test(value)){
    callback(new Error("请填写合法的url"));
    return;
  }

  callback();
}

let rules = {
  // 自定义验证
  validityDate: [
    {validator: validateValidityDate, trigger: 'blur'},
  ],
  totalCouponNum: [
    {validator: validateTotalCouponNum, trigger: 'blur',required: true},
  ],
  userLimitGetCouponNum: [
    {validator: validateUserLimitGetCouponNum, trigger: 'blur',required: true},
  ],
  fullAmount:[
    {validator: validateFullAmount, trigger: 'blur',required: true},
  ],
  discount:[
    {validator: validateDiscount, trigger: 'blur',required: true},
  ],
  useJumpUrl:[
    {validator: validateJumpUrl, trigger: 'blur',required: true},
  ],
  // 基础验证
  name:[
    {required: true, message: '模板名称不能为空', trigger: 'blur'},
    { max: 20, message: '不能大于20个字符', trigger: 'blur' }
  ],
  title:[
    {required: true, message: '优惠券标题不能为空'},
    { max: 20, message: '不能大于20个字符', trigger: 'blur' }
  ],
  subhead:[
    {required: true, message: '优惠券副标题不能为空'},
    { max: 20, message: '不能大于20个字符', trigger: 'blur' }
  ],
  description:[
    {required: true, message: '使用说明不能为空'},
    { max: 1000, message: '不能大于1000个字符', trigger: 'blur' }
  ],
  sourceCode:[
    {required: true, message: '来源不能为空'}
  ],
  type: [
    {required: true, message: '模板类型不能为空'}
  ],
  brandTypes:[
    {required: true, message: '品类不能为空'}
  ],
  isUserGetCoupon:[
    {required: true, message: '字段不能为空'}
  ],
}

let formConfig ={
  cols: 2,
    'label-width': '135px',
  'input-enter-submit':false,
  values:{
  type: 1,
    isUserGetCoupon:1,
},
  rules:rules,
    'default-field-col':2,
  fields:[
  // 前台名称
  {
    type:'input',
    prop: 'name',
    label: '模板名称',
    options:{
      placeholder: '后台模板名称，方便记忆查询，前台用户不可见',
    }
  },
  // 后台名称
  {
    type:'input',
    prop: 'title',
    label: '优惠券标题',
    options:{
      placeholder:'优惠券标题，前台用户可见',
    }
  },
  // 副标题
  {
    type:'input',
    prop: 'subhead',
    label: '优惠券副标题',
    options:{
      placeholder:'优惠券副标题，前台用户可见，例如："指定商品", "基因类产品专用", "基因类儿童产品专用"',
    }
  },
  // 使用说明
  {
    type:'input',
    prop: 'description',
    label: '使用说明',
    options:{
      type:'textarea',
      autosize: true,
      placeholder: '输入使用说明'
    }
  },
  // 优惠券来源
  {
    type:'select',
    prop: 'sourceCode',
    label: '优惠券来源',
    options:{
      options: constant.COUNPON_SOURCE
    }
  },
  // 类型
  {
    type:'select',
    prop: 'type',
    label: '类型',
    options:{
      options: constant.COUNPON_TYPES,
      name: 'type',
      '@change': (value)=>{
        validateAttr.couponType = value;
        // if(validateAttr.couponType === constant.COUPON_TYPES_VALUES.zero){
        //   $('input[name="fullAmount"]').closest(".el-form-item").hide();
        //   $('input[name="discount"]').closest(".el-form-item").hide();
        // }else{
        //   $('input[name="fullAmount"]').closest(".el-form-item").show();
        //   $('input[name="discount"]').closest(".el-form-item").show();
        // }
      },
    }
  },
  // 金额-满减/折
  {
    type:'input',
    prop: 'fullAmount',
    col: 1,
    label: '满',
    options:{
      placeholder:'满多少金额可以使用',
      name: 'fullAmount',
      '@change': (value)=>{validateAttr.fullAmount = value},
    }
  },
  {
    type:'input',
    prop: 'discount',
    col: 1,
    label: '减/折',
    options:{
      name:'discount',
      placeholder: '优惠的金额或折扣比, 折扣请输入0-10的数字'
    }
  },
  // 领取时间
  {
    type: 'date',
    prop: 'getDateRange',
    label:'领取时间段',
    options:{
      "type": 'daterange',
      'range-separator': '至',
      'start-placeholder':'开始日期',
      'end-placeholder':'结束日期',
    }
  },
  // 有效期-固定时间段
  {
    type: 'date',
    prop: 'expireDate',
    label:'有效期',
    options:{
      "type": 'daterange',
      'range-separator': '至',
      'start-placeholder':'开始日期',
      'end-placeholder':'结束日期',
    }
  },
  // 有效期-领取之后 天数
  {
    type:'input',
    prop: 'validityDate',
    label: '',
    options:{
      // isNumber: true,
      placeholder: '与"固定时间段"任选其一填写，两者也可以叠加',
      prepend: '领取后',
      append: '天有效'
    }
  },
  // 领取数量-总共数量 张数
  {
    type:'input',
    prop: 'totalCouponNum',
    label: '总共限领张数',
    options:{
      name: "totalCouponNum",
      placeholder: "Offer系统发放时无效，由Offer系统控制库存",
      '@change': (value)=>{validateAttr.totalCouponNum = value},
    }
  },
  // 领取数量-每人限制 张数
  {
    type:'input',
    prop: 'userLimitGetCouponNum',
    label: '每人限领张数',
    options:{
      placeholder: "Offer系统发放时无效，由Offer系统控制库存"
    }
  },
  // 是否支持用户领券
  {
    type:'radio',
    prop:'isUserGetCoupon',
    label:'支持用户领券',
    options:{
      radios:constant.IS_SURPPORT_RADIOS,
      tooltip: '不支持的优惠券只能通过系统发放',
      'tooltip-placement':'right',
    }
  },
  {
    type:'input',
    prop: 'useJumpUrl',
    label: '跳转地址',
    options:{
      placeholder: '点击"立即使用"时跳转的地址，例如：http://www.zhongan.com',
    }
  },
  // 可用范围
  {
    'type': 'tree',
    'prop': 'brandTypes',
    'label': '可用类目',
    'options': {
      'node-key': 'id',
      'show-checkbox': true,
      'data': [],
      placeholder: '请选择单一类目，或单一类目下的部分产品'
    }
  }
],
  'btns-position':'',
  'btns-style':{

},
  buttons:[
    {
      'text': '提交',
      'event': 'submit',
      'type': 'primary'
    },
    {
      'text': '重置',
      'event': '@reset',
      'type': 'danger'
    }
  ],
}

export default formConfig;
